﻿using Presentacion.Clases.Dto;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Seg.Logica;
using Seg.Entidades;
using Presentacion.Clases;

namespace Presentacion.Controllers.Mantenimiento
{
    public class PerfilController : Base
    {
        //
        // GET: /Perfil/

        public ActionResult Index()
        {
            Init(false);
            return View();
        
        }

        public JsonResult Eliminar(Perfil entidad)
        {
            Resultado resultado = new Resultado();
            try
            {
                if (!isLogout(ref resultado))
                {
                    PerfilLogistica servicio = new PerfilLogistica();

                    var result = servicio.Eliminar(entidad.CodigoPerfil);

                    if (result == 1)
                    {
                        resultado.result = 1;
                        resultado.message = Constante.MensajeGenerico.MSG_OK_ELIMINAR;
                    }
                    else
                    {
                        resultado.result = 0;
                        resultado.message = Constante.MensajeGenerico.MSG_ERROR_ELIMINAR;
                    }
                }
            }
            catch (Exception ex)
            {
                resultado.result = 0;
                resultado.message = Constante.MensajeGenerico.MSG_ERROR_GENERICO;
                ucLogApp.ucLog.GrabarLogError(NombreAPP, UsuarioActual, "ListarTipoTabla", ex);
            }
            return Json(resultado, JsonRequestBehavior.AllowGet);
        }

        public JsonResult ListarPerfilJQGRID(decimal CodigoSistema,decimal CodigoModulo,decimal CodigoPerfil, string anulado, string sidx, string sord, int page, int rows)
        {

            PerfilLogistica servicio = new PerfilLogistica();
            List<DTOPerfil> lst = new List<DTOPerfil>();

            var perfiles = servicio.Listar(CodigoSistema,CodigoModulo,CodigoPerfil,anulado);
            
            perfiles.ForEach(c=>{
                DTOPerfil perfilDTO = new DTOPerfil();
                perfilDTO.CodigoPerfil = c.CodigoPerfil;
                perfilDTO.Nombre = c.Nombre;
                perfilDTO.Descripcion = c.Descripcion;
                perfilDTO.DescModulo = new ModuloLogistica().ObtenerModulo(Convert.ToDecimal(c.CodigoModulo)).Descripcion;
                perfilDTO.Anulado = c.Anulado;
                lst.Add(perfilDTO);
            });
            
            var count = lst.Count();
            int pageIndex = page - 1;
            int pageSize = rows;
            int totalRecords = count;
            int totalPages = (int)Math.Ceiling((float)totalRecords / (float)pageSize);

            var items = lst.Skip(pageIndex * pageSize).Take(pageSize);

            var result = new
            {
                total = totalPages,
                page,
                records = count,
                rows = (
                    from item in items
                    select new
                    {
                        id = item.CodigoPerfil,
                        cell = new string[] { 
                            item.CodigoPerfil.ToString(),
                            item.Nombre,
                            item.Descripcion,
                            item.DescModulo,
                            Convert.ToString(item.Anulado == true ? "Inactivo" : "Activo") 
                        }
                    }).ToArray()
            };
            return Json(result, JsonRequestBehavior.AllowGet);
        }

        public JsonResult Actualizar(Perfil entidad)
        {
            Resultado resultado = new Resultado();
            try
            {
                if (!isLogout(ref resultado))
                {
                    PerfilLogistica servicio = new PerfilLogistica();
                    servicio.Actualizar(entidad);
                    resultado.result = 1;
                    resultado.message = Constante.MensajeGenerico.MSG_OK_GRABAR;
                }
            }
            catch (Exception ex)
            {
                resultado.result = 0;
                resultado.message = Constante.MensajeGenerico.MSG_ERROR_GENERICO;
                ucLogApp.ucLog.GrabarLogError(NombreAPP, UsuarioActual, "Actualizar", ex);
            }
            return Json(resultado, JsonRequestBehavior.AllowGet);
        }

        public JsonResult Insertar(Perfil entidad)
        {
            Resultado resultado = new Resultado();
            try
            {
                if (!isLogout(ref resultado))
                {
                    PerfilLogistica servicio = new PerfilLogistica();
                    servicio.Insertar(entidad);
                    resultado.result = 1;
                    resultado.message = Constante.MensajeGenerico.MSG_OK_GRABAR;
                }
            }
            catch (Exception ex)
            {
                resultado.result = 0;
                resultado.message = Constante.MensajeGenerico.MSG_ERROR_GENERICO;
                ucLogApp.ucLog.GrabarLogError(NombreAPP, UsuarioActual, "Insertar", ex);
            }
            return Json(resultado, JsonRequestBehavior.AllowGet);
        }

        public JsonResult ObtenerPerfil(Perfil entidad)
        {
            Resultado resultado = new Resultado();
            try
            {
                if (!isLogout(ref resultado))
                {
                    PerfilLogistica servicio = new PerfilLogistica();
                    DTOPerfil perfilDTO = new DTOPerfil();

                    var perfil = servicio.ObtenerPerfil(entidad.CodigoPerfil);

                    perfilDTO.CodigoPerfil = perfil.CodigoPerfil;
                    perfilDTO.CodigoModulo = perfil.CodigoModulo;
                    perfilDTO.CodigoSistema = new ModuloLogistica().ObtenerModulo(Convert.ToDecimal(perfil.CodigoModulo)).CodigoSistema;
                    perfilDTO.Nombre = perfil.Nombre;
                    perfilDTO.Descripcion = perfil.Descripcion;
                    perfilDTO.Anulado = perfil.Anulado;

                    resultado.result = 1;
                    resultado.data = Json(perfilDTO, JsonRequestBehavior.AllowGet);
                }
            }
            catch (Exception ex)
            {
                resultado.result = 0;
                resultado.message = Constante.MensajeGenerico.MSG_ERROR_GENERICO;
                ucLogApp.ucLog.GrabarLogError(NombreAPP, UsuarioActual, "ObtenerPerfil", ex);
            }
            return Json(resultado, JsonRequestBehavior.AllowGet);
        }

        public JsonResult ListarPerfil()
        {
            Resultado resultado = new Resultado();
            try
            {
                if (!isLogout(ref resultado))
                {
                    List<Perfil> lst = new List<Perfil>();
                    PerfilLogistica servicio = new PerfilLogistica();

                    lst = servicio.Listar(0, 0, 0, "A");
                    List<Constante.SelectItems> items = new List<Constante.SelectItems>();

                    lst.ForEach(c =>
                    {
                        items.Add(new Constante.SelectItems
                        {
                            Valor = Convert.ToString(c.CodigoPerfil),
                            Descripcion = c.Nombre
                        });
                    });

                    resultado.result = 1;
                    resultado.data = Json(items, JsonRequestBehavior.AllowGet);
                    resultado.message = Constante.MensajeGenerico.MSG_OK_GENERICO;
                }
            }
            catch (Exception ex)
            {
                resultado.result = 0;
                resultado.message = Constante.MensajeGenerico.MSG_ERROR_GENERICO;
                ucLogApp.ucLog.GrabarLogError(NombreAPP, UsuarioActual, "ListarPerfil", ex);
            }
            return Json(resultado, JsonRequestBehavior.AllowGet);
        }
        public JsonResult ListarPerfilXSistema(int CodigoSistema)
        {
            Resultado resultado = new Resultado();
            try
            {
                if (!isLogout(ref resultado))
                {
                    PerfilLogistica servicio = new PerfilLogistica();
                    var lst = servicio.ListarPerfilXSistema(CodigoSistema);

                    List<Constante.SelectItems> items = new List<Constante.SelectItems>();

                    lst.ForEach(c =>
                    {
                        items.Add(new Constante.SelectItems
                        {
                            Valor = Convert.ToString(c.CodigoPerfil),
                            Descripcion = c.Nombre
                        });
                    });

                    resultado.result = 1;
                    resultado.data = Json(items, JsonRequestBehavior.AllowGet);
                    resultado.message = Constante.MensajeGenerico.MSG_OK_GENERICO;
                }
            }
            catch (Exception ex)
            {
                resultado.result = 0;
                resultado.message = Constante.MensajeGenerico.MSG_ERROR_GENERICO;
                ucLogApp.ucLog.GrabarLogError(NombreAPP, UsuarioActual, "ListarPerfilXSistema", ex);
            }
            return Json(resultado, JsonRequestBehavior.AllowGet);
        }
        public JsonResult ListarPerfilXModulo(int CodigoModulo)
        {
            Resultado resultado = new Resultado();
            try
            {
                if (!isLogout(ref resultado))
                {
                    List<Perfil> lst = new List<Perfil>();
                    PerfilLogistica servicio = new PerfilLogistica();

                    lst = servicio.ListaPerfilXModulo(CodigoModulo);
                    List<Constante.SelectItems> items = new List<Constante.SelectItems>();

                    lst.ForEach(c =>
                    {
                        items.Add(new Constante.SelectItems
                        {
                            Valor = Convert.ToString(c.CodigoPerfil),
                            Descripcion = c.Nombre
                        });
                    });

                    resultado.result = 1;
                    resultado.data = Json(items, JsonRequestBehavior.AllowGet);
                    resultado.message = Constante.MensajeGenerico.MSG_OK_GENERICO;
                }
            }
            catch (Exception ex)
            {
                resultado.result = 0;
                resultado.message = Constante.MensajeGenerico.MSG_ERROR_GENERICO;
                ucLogApp.ucLog.GrabarLogError(NombreAPP, UsuarioActual, "ListarPerfilXModulo", ex);
            }
            return Json(resultado, JsonRequestBehavior.AllowGet);
        }
    }
}
